package org.jeecg.modules.oms.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.oms.entity.SemiProductSalesOrderProgress;

import java.util.List;

/**
 * 半成品销售订单进度Mapper接口
 */
public interface SemiProductSalesOrderProgressMapper extends BaseMapper<SemiProductSalesOrderProgress> {

    /**
     * 根据订单ID查询进度记录列表
     * @param orderId 订单ID
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByOrderId(@Param("orderId") String orderId);

    /**
     * 分页查询进度记录
     * @param page 分页参数
     * @param progress 查询条件
     * @return 分页结果
     */
    IPage<SemiProductSalesOrderProgress> selectProgressPage(Page<SemiProductSalesOrderProgress> page, @Param("progress") SemiProductSalesOrderProgress progress);

    /**
     * 根据状态查询进度记录
     * @param orderId 订单ID
     * @param status 状态
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByStatus(@Param("orderId") String orderId, @Param("status") Integer status);

    /**
     * 根据操作人查询进度记录
     * @param operatorId 操作人ID
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByOperator(@Param("operatorId") String operatorId);

    /**
     * 根据操作类型查询进度记录
     * @param operationType 操作类型
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByOperationType(@Param("operationType") String operationType);

    /**
     * 获取订单最新进度记录
     * @param orderId 订单ID
     * @return 最新进度记录
     */
    SemiProductSalesOrderProgress selectLatestByOrderId(@Param("orderId") String orderId);

    /**
     * 统计进度记录数量
     * @param orderId 订单ID
     * @return 记录数量
     */
    Integer countByOrderId(@Param("orderId") String orderId);

    /**
     * 根据时间范围查询进度记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByTimeRange(@Param("startTime") java.util.Date startTime, @Param("endTime") java.util.Date endTime);

    /**
     * 批量插入进度记录
     * @param progressList 进度记录列表
     * @return 插入数量
     */
    int batchInsert(@Param("progressList") List<SemiProductSalesOrderProgress> progressList);

    /**
     * 根据订单ID和状态范围查询进度记录
     * @param orderId 订单ID
     * @param oldStatus 原状态
     * @param newStatus 新状态
     * @return 进度记录列表
     */
    List<SemiProductSalesOrderProgress> selectByStatusRange(@Param("orderId") String orderId, @Param("oldStatus") Integer oldStatus, @Param("newStatus") Integer newStatus);
}
